using System;
using System.Collections.Generic;
using System.Text;
using Sinacor.Infra.Service.Data;
using System.Data.Common;
using System.Data;
using Sinacor.Infra.Service.Security.Authorization;

namespace Sinacor.Servico.Bovespa.Corretagem.ResourceAccess
{
    /// <summary>
    /// Acesso a dados de tipos de operações de verificação de políticas de
    /// corretagens
    /// </summary>
    public class TipoOperacaoVerificacao : BaseResourceAccess
    {
        #region Construtor

        /// <summary>
        /// Construtor TipoOperacaoVerificacao
        /// </summary>
        public TipoOperacaoVerificacao()
            : base(AuthorizationContext.Current.CompanyId)
        {
        }

        #endregion

        #region Métodos

        /// <summary>
        /// Consulta lista de tipos de operações de verificação de políticas de corretagens
        /// conforme filtro.
        /// </summary>
        /// <param name="entity"></param>
        public List<BusinessEntity.TipoOperacaoVerificacao> ConsultarTiposOperacoes(BusinessEntity.Parameter.FiltroTipoOperacaoVerificacao entity)
        {
            List<BusinessEntity.TipoOperacaoVerificacao> listaTipoOperacaoVerificacao = null;
            StringBuilder sql = new StringBuilder();

            using (DbCommand command = this.DataBase.GetSqlStringCommand(" "))
            {
                sql.AppendLine("SELECT");
                sql.AppendLine("    COD_TIPO_OPRC Codigo,");
                sql.AppendLine("    NOME_TIPO_OPRC Nome");
                sql.AppendLine("FROM");
                sql.AppendLine("    TBOTIPO_OPRC");
                sql.AppendLine("WHERE 1 = 1");
                

                //Filtros Opcionais
                if (!string.IsNullOrEmpty(entity.Codigo))
                {
                    sql.AppendLine("AND COD_TIPO_OPRC  = :Codigo");
                    this.DataBase.AddInParameter(command, "Codigo", DbType.String, entity.Codigo);
                }

                if (!string.IsNullOrEmpty(entity.Nome))
                {
                    sql.AppendLine("AND NOME_TIPO_OPRC  = :Nome");
                    this.DataBase.AddInParameter(command, "Nome", DbType.String, entity.Nome);
                }

                sql.AppendLine("ORDER BY ");
                sql.AppendLine("NOME_TIPO_OPRC");

                command.CommandText = sql.ToString();

                listaTipoOperacaoVerificacao = this.FindAll<BusinessEntity.TipoOperacaoVerificacao>(command, reader => new BusinessEntity.TipoOperacaoVerificacao
                {
                    Codigo = (reader["Codigo"] != DBNull.Value ? reader.GetValue<string>("Codigo") : string.Empty),
                    Nome = (reader["Nome"] != DBNull.Value ? reader.GetValue<string>("Nome") : string.Empty)
                });

            }

            return listaTipoOperacaoVerificacao;            
        }

        #endregion
    }
}